#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>

int main()
{
    //stdin,stout,stferr -> FILE* -> 内部一定有fd -> 怎么证明？
    printf("stdin: %d\n", stdin->_fileno);
    printf("stdout: %d\n", stdout->_fileno);
    printf("stderr: %d\n", stderr->_fileno);


    //char input[16];
    //ssize_t s = read(0, input, sizeof(input));
    //if (s > 0)
    //{
    //    input[s] = '\0';
    //    printf("%s\n", input);
    //}

   // int a = 10;
   // //scanf里面是有stdin的
   // fscanf(stdin, "%d", &a);
   // printf("%d\n", a);

   // fprintf(stdout, "hello stdout\n"); 
   // const char* s = "hello 1\n";
   // write(1, s, strlen(s));

}


//int main()
//{
//    umask(0);//把系统的umask设置为0
//
//    //int fd = open("log.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666);//rw-rw-rw-
//    //int fd = open("log.txt", O_WRONLY|O_CREAT|O_APPEND, 0666);//rw-rw-rw-
//    //int fd = open("log.txt", O_RDONLY);
//    int fd1 = open("log.txt1", O_WRONLY|O_CREAT|O_APPEND, 0666);//rw-rw-rw-
//    printf("open success, fd: %d\n", fd1);
//    int fd2 = open("log.txt2", O_WRONLY|O_CREAT|O_APPEND, 0666);//rw-rw-rw-
//    printf("open success, fd: %d\n", fd2);
//    int fd3 = open("log.txt3", O_WRONLY|O_CREAT|O_APPEND, 0666);//rw-rw-rw-
//    printf("open success, fd: %d\n", fd3);
//    int fd4 = open("log.txt4", O_WRONLY|O_CREAT|O_APPEND, 0666);//rw-rw-rw-
//    printf("open success, fd: %d\n", fd4);
//    close(fd1);
//    close(fd2);
//    close(fd3);
//    close(fd4);
//
//   // if(fd < 0)
//   // {
//   //     perror("open");
//   //     return 1;
//   // }
//   // //open success
//   // printf("open success, fd: %d\n", fd);
//   // char buffer[64];
//   // memset(buffer,'\0', sizeof(buffer));
//   // read(fd, buffer, sizeof(buffer));
//   // printf("%s",buffer);
//    
//    //const char* s = "hello write\n";
//    //const char* s = "aa\n";
//    //write(fd, s, strlen(s));//要不要+1？ 不加
//    
//    //close(fd);
//    return 0;
//
//}


////用int中的不重复的一个bit,就可以标识一种状态
//#define ONE 0x1 //0000 0001
//#define TWO 0x2 //0000 0010
//#define THREE 0x4 //0000 0100
//
//void show(int flag) //0000 0111
//{
//    if(flag & ONE)
//    {
//        printf("hello one\n");
//    }
//    if(flag & TWO)
//     {
//         printf("hello two\n");
//     }
//    if(flag & THREE)
//    {
//        printf("hello three\n");
//    }
//}
//int main()
//{
//    show(ONE);
//    printf("--------------\n");
//    show(TWO);
//    printf("--------------\n"); 
//    show(ONE | TWO); //0000 0001 | 0000 0010 = 0000 0011
//    printf("--------------\n"); 
//    show(ONE | TWO | THREE);// 0000 0111
//    printf("--------------\n"); 
//    show(ONE | THREE);//0000 0101
//
//}

//C语言的文件操作
//int main(int argc, char* argv[])
//{
//    if(argc != 2)
//    {
//        printf("argv error!\n");
//        return 1;
//    }
//    FILE* fp = fopen(argv[1],"r");
//    if (fp == NULL)
//    {
//        perror("fopen");
//        
//        return 2;
//    }
//
//    //按行读取
//    char line[64];
//    //fgets -> C -> s(string) -> 会自动在字符结尾添加\0
//    while(fgets(line, sizeof(line), fp) != NULL)
//    {
//           //printf("%s\n", line); 
//           fprintf(stdout, "%s", line);
//    }
//    
//   // //进行文件操作
//   // const char* s1 = "hello fwrite\n";//要不要+1? 不要，这是文件，保存有效数据，\0不是不是有效数据，是字符串结束的标志
//   // fwrite(s1, strlen(s1), 1, fp);
//
//   // const char* s2 = "hello fprintf\n";
//   // fprintf(fp, "%s", s2);
//
//   // const char* s3 = "hello fputs\n";
//   // fputs(s3, fp);
//
//    fclose(fp);
//    //while (1)
//    //{
//    //    sleep(1);
//    //}
//    return 0;
//}
